STM32F103至STM32F407程序移植参考

您所在的位置:网站首页 stm32 f103 f407 STM32F103至STM32F407程序移植参考

STM32F103至STM32F407程序移植参考

2024-03-21 15:56| 来源: 网络整理| 查看: 265

最近做了从STM32F103到STM32F407的程序移植工作。在做这项工作之前发现网上没有太全面的移植攻略,因而确实费了一番功夫和走了一些弯路。现在程序移植工作基本做完,趁着还能记起来遇到的问题,把程序移植需要注意的点整理在这里,希望对以后做这个工作的朋友能有些帮助。

虽然我做的是F407的移植,但是大部分内容对于F40xx_41xx,乃至F4其他系列的芯片都适用。

文章如要转载请私信与我联系,并注明作者Mr.括号。

一、硬件兼容改造

先说一下硬件吧,两种芯片的大部分引脚是相同的,需要改动部分电源引脚。官方的芯片数据手册上给出了兼容版的设计图,以100引脚的为例:

其中19引脚从VSS改成VDD,49和73引脚分别从接VSS改成接电容,电容值为2.2uF。

二、系统时钟设置

F407的外部高速时钟的宏定义在system_stm32f4xx.c中。

#define HSE_BYPASS_INPUT_FREQUENCY 8000000

其中8000000代表外部时钟选用8M晶振,此处需对应实际情况修改。

时钟设置在函数SetSysClock()中进行设置,关键语句为:

RCC->PLLCFGR = PLL_M | (PLL_N 1)-1) uint32_t GPIO_Pin; GPIOMode_TypeDef GPIO_Mode; GPIOSpeed_TypeDef GPIO_Speed; GPIOOType_TypeDef GPIO_OType; GPIOPuPd_TypeDef GPIO_PuPd; }GPIO_InitTypeDef;

F103中的GPIO_Mode在F407中被拆解成了三个参数:GPIO_Mode、GPIO_OType和GPIO_PuPd。其中GPIO_Mode有输入、输出、复用和模拟四种模式可选,GPIO_OType选择推挽和开漏,GPIO_PuPd选择上拉、下拉和浮空。

五、DMA设置

F407中DMA的Channel统一换成了Stream与Channel组合的形式。DMA的初始化结构体DMA_InitTypeDef中多出了参数DMA_InitStructure.DDMA_Channel。不同外设请求对应的数据流和通道在官方参考手册中有明确的示例。DMA1和DMA2的请求映射如下:

另外还有一个小改动,在F103中DMA_Channel_TypeDef结构体中的元素为:

typedef struct { __IO uint32_t CCR; __IO uint32_t CNDTR; __IO uint32_t CPAR; __IO uint32_t CMAR; } DMA_Channel_TypeDef;

对应在F407中的DMA_Stream_TypeDef为:

typedef struct { __IO uint32_t CR; __IO uint32_t NDTR; __IO uint32_t PAR; __IO uint32_t M0AR; __IO uint32_t M1AR; __IO uint32_t FCR; } DMA_Stream_TypeDef;

在调用到该结构体中参数时需要注意。

六、重映射

在F407中不存在重映射(REMAP)的概念了,取而代之的是引脚的复用映射(AF)。而相比于F103的重映射,引脚复用功能更加灵活和全面。引脚复用时是对单独引脚进行配置。例如对USART2的PA2和PA3的复用设置指令为:

GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);

Mr.括号我直接把复用映射表列出来,方便大家查询:

七、其他

用BSRRH代替了BRR

用BSRRL代替了BSRR

目前想到的就是上述这些,如果还有其他没提及的欢迎补充,如有纰漏敬请指正!

转载:https://zhuanlan.zhihu.com/p/24981431



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3